真·手把手带你开发 Nebula 领中科院暑期活动项目奖金
开源软件供应链点亮计划 - 暑期 2021(下简称:开源之夏)是由中国科学院软件研究所与 openEuler 社区共同举办的一项面向高校学生的暑期活动,旨在鼓励在校学生积极参与开源软件的开发维护,促进优秀开源软件社区的蓬勃发展。中科院联合包括 Nebula Graph 在内的国内各大开源社区,针对重要开源软件的开发与维护提供项目,并向全球高校学生开放报名。
今天便是学生公开报名,提交项目申请的第一天。
学生在自由选择项目后,与社区导师沟通实现方案并撰写项目计划书。被选中的学生将在社区导师指导下,按计划完成开发工作,并将成果贡献给社区。根据项目的难易程度和完成情况,参与者将获得由主办方发放的 6,000 - 12,000 不等的项目奖金。
活动官网:https://summer.iscas.ac.cn/
Nebula in 开源之夏
本次开源之夏活动,Nebula 一共选取了 11 个难度适中的任务供广大的优秀学子进行研究。
>>>>
任务 1:支持 JDBC 协议
主要内容是让 Nebula 可以对接 JDBC 协议,参考项目 neo4j-jdbc。
难度等级:中
导师:丁燕梅
导师联系方式:laura.ding@vesoft.com
具体开发任务:实现 nebula jdbc driver,实现 JDCB 的相关接口
所需技能:Java
项目产出:
用户可直接使用 JDBC 驱动操作 nebula 服务
项目 repo 有自动运行的单元测试
>>>>
任务 2:提供 nebula 的查询语句的图语义封装
主要内容为通过提供一组图语义的对象和方法,让用户不需要熟悉和感知 nGQL 的语法,就能对 Nebula 进行读写操作和图相关遍历。参考项目 py2neo。
难度等级:中
导师:丁燕梅
导师联系方式:laura.ding@vesoft.com
具体开发任务:
熟悉 Nebula 的 nGQL 语法和 MATCH 语法
封装一些图相关的对象,比如 GraphService, Graph, Subgraph, Vertex, Edge, Path 等,提供图的增删改查以及 schema 相关操作
提供 nGQL 和 MATCH 包装的方法,用户根据不同方法执行相应的 query
在实现过程中需要考虑如何使内部实现组装的 query 更加高效
所需技能:
Python / Java
Nebula nGQL 语法 和 MATCH 语法的熟悉
项目产出:
用户可以通过这个工具库,无需熟悉 nGQL 即可对 Nebula 图数据库稳定地执行相关操作
项目 repo 有自动运行的单元测试
>>>>
任务 3:实现 Rust Client
主要内容为通过封装 fbthrift 的一些接口,提供与 Golang / CPP / Java 类似的 Client 接口。
难度等级:中
导师:黄世海
导师联系方式:shylock.huang@vesoft.com
具体开发任务:
需要保持同其他 Client 接口的统一
需要考虑并发和 Session 的管理
所需技能:
Rust
fbthrift
项目产出:
Nebula Rust Client
>>>>
任务 4:完善 Node.js 客户端
主要内容为根据提供的客户端设计文档,提供 Node.js 版本的 Graph Client 相关实现。
难度等级:中
导师:丁燕梅
导师联系方式:laura.ding@vesoft.com
具体开发任务:
根据设计文档实现一个连接池处理简单的负载均衡以及 Session 相关的异常处理
封装服务端返回的数据结构处理
增加相应的单元测试代码
所需技能:
Node.js
对 Nebula 使用有一定了解
项目产出:
用户可以直接通过 Node.js Client 稳定的访问 nebula 服务
用户可以到 npm 源获取到相应的版本包
项目 repo 有自动运行的单元测试
>>>>
任务 5:提供遵循 RESTful 规范的 API 定义和实现
主要内容为梳理现有 HTTP 的 API,使用 POST/PUT/GET/DELETE 的方式处理 Nebula 中的 CRUD 请求。
难度等级:中
导师:Yee
导师联系方式:yee.yi@vesoft.com
具体开发任务:
书写 OpenAPI/Swagger API 定义和文档
调研相关 Web Framework 可以根据 YAML 自动生成 Validator 和 API 接口
重构 Go Client 的使用逻辑
所需技能:
Golang
HTTP
OpenAPI
项目产出:
OpenAPI/Swagger API 定义文档
重构后的 HTTP Server 实现
>>>>
任务 6:提供更多的 RBO 优化规则
主要内容为研究 Nebula 目前生成的执行计划,并寻找可以优化的规则,生成更优的计划。
难度等级:难
导师:Jie
导师联系方式:jie.wang@vesoft.com
具体开发任务:
熟悉 Nebula 生成执行计划的流程,熟悉各个算子的具体作用
添加一些新的优化规则
所需技能:
C++
数据库优化
项目产出:
实现至少两条 RBO 优化规则;
调研 CBO 可行性,给出设计文档
>>>>
任务 7:研究和实现基于图数据库 Nebula 的图算法
主要内容为对接图数据库 Nebula 和图计算引擎,提供图算法。
难度等级:中
导师:王昌圆
导师联系方式:anqi.wang@vesoft.com
具体开发任务(二选一):
图数据库 Nebula 已对接 GraphX,基于 GraphX 实现 Hanp、Closeness、Line、Node2Vec 等算法;
图数据库 Nebula 对接其他图计算引擎,如 Plato、Angel。
所需技能:
Scala
C++
项目产出:
实现 GraphX 上的 Hanp、ClosenessLine、Node2Vec 算法
实现 Nebula 与 Plato 的整合
>>>>
任务 8:增强 nebula-importer 的导入功能
主要内容为增强现有功能和 bugfix,提供更友好的错误处理方式。
难度等级:中
导师:Yee
导师联系方式:yee.yi@vesoft.com
具体开发任务:
支持指定目录导入
已有 bug fix
增强错误处理机制
所需技能:
Golang
项目产出:
新功能开发代码和测试代码
bugfix 的测试代码
>>>>
任务 9:增强 Spark 导入工具
主要内容为丰富 Spark 导入工具 Nebula-Exchange 项目可支持的数据源。
难度等级:中
导师:王昌圆
导师联系方式:anqi.wang@vesoft.com
具体开发任务:
在已支持的数据源基础上增加 TigerGraph 等数据源,可自由扩展。
所需技能:
Scala / Java
项目产出:
支持 TigerGraph 数据导入 Nebula Graph
>>>>
任务 10:增强 Nebula-Flink-Connector,提供 SQL Connector
主要内容为在 Nebula-Flink-Connector 中支持 Flink SQL 操作图数据库 Nebula,参考项目 Flink-Mysql-connector,使用示例见 JDBC SQL Connector。
难度等级:中
导师:王昌圆
导师联系方式:anqi.wang@vesoft.com
具体开发任务:
Nebula_Flink-Connector 中已实现 DataStream-Connector,可在项目中增加 Nebula 的 catalog 管理,实现 SQL Connector,通过 Flink SQL 直接操作 Nebula Graph 图数据库。
所需技能:
Java
项目产出:
实现 Nebula 和 Flink 的 SQL Connector
>>>>
任务 11:整合 nebula-importer 和 nebula-http-gateway 实现
主要内容为将 importer 的功能集成到 nebula-http-gateway 中。
难度等级:中
导师:Yee
导师联系方式:yee.yi@vesoft.com
具体开发任务:
重构现有 nebula-http-gateway 和 nebula-importer 的交互流程
将 http 通信的方式切换为 library 调用
重新设计日志的交互方式
所需技能:
Golang
HTTP
项目产出:
完成两个项目的融合
完成融合后的项目的测试
何为 Nebula
Nebula 是由国内图数据库研发商杭州欧若数网科技有限公司自研的一款开源分布式图数据库,具有可水平拓展、高吞吐、低延迟、高可用等特性。
开源之夏活动安排
开源之夏的详细安排可见 Nebula 之前推文:开源社区纷纷在报名的暑期 2021,是场怎样的活动?
Nebula 社区有话说:Hi,阅读本文的你如果有兴趣向 Nebula 投稿,说一说你的使用心得、踩坑经历、调优过程,记得联系官方运营人员:JamieYoung
交流图数据库技术?公众号回复:加群,开始你的 Nebula 之旅。
🙋♂️ 喜欢本文的话,来个分享、👍 赞、在看
谢谢哟^^